﻿using Dynamic.Json;

namespace 中间件1
{
    public class CheckMiddleware
    {
        private readonly RequestDelegate _next;
        public CheckMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            string password=context.Request.Query["password"];
            if (password == "123")
            {
                //Json请求需要使用PostMan测试
                if (context.Request.HasJsonContentType()) //判断请求头是否是application/json
                {
                    var stream=context.Request.BodyReader.AsStream();
                    //system.text.json目前(.net6)不支持把json反序列化为dynamic类型
                    //.NET 6目前不支持把json反序列化为dynamic，本来preview 4支持，但是在preview 7又去掉了
                    //所以暂时用Dynamic.Json来实现。
                    dynamic obj =await DJson.ParseAsync(stream);
                    context.Items["BodyJson"] = obj;
                }
                await _next.Invoke(context);
            }
            else
            {
                context.Response.StatusCode = 401;
            }
           
            
        }

    }
}
